//
//  ViewController.m
//  test
//
//  Created by lizp on 2017/2/10.
//  Copyright © 2017年 Apple05. All rights reserved.
//

#import "ViewController.h"
#import <LocalAuthentication/LocalAuthentication.h>

@interface ViewController ()

@property (nonatomic,strong) UIButton *touchValid;
@property (nonatomic,strong) UILabel *showMessage;
@property (nonatomic,strong) LAContext *context;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    self.touchValid = [UIButton buttonWithType:UIButtonTypeCustom];
    self.touchValid.frame = CGRectMake(([UIScreen mainScreen].bounds.size.width-160)/2, 100, 160, 30);
    [self.touchValid setTitle:@"指纹验证" forState:UIControlStateNormal];
    [self.touchValid setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
    [self.view addSubview:self.touchValid];
    [self.touchValid addTarget:self action:@selector(touchValidClick) forControlEvents:UIControlEventTouchUpInside];
    
    self.showMessage = [[UILabel alloc ] initWithFrame:CGRectMake(([UIScreen mainScreen].bounds.size.width-320)/2, 200, 320, 60)];
    self.showMessage.text = @"验证结果";
    self.showMessage.font = [UIFont systemFontOfSize:14];
    self.showMessage.numberOfLines = 0;
    self.showMessage.textAlignment = NSTextAlignmentCenter;
    [self.view addSubview:self.showMessage];
    
    
    
}

-(void)touchValidClick {

    
    if ([self hasDeviceSupportTouchID]) {
        self.showMessage.text = @"设备支持指纹";
        

        [self.context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"使用指纹登录" reply:^(BOOL success, NSError * _Nullable error) {
            
            dispatch_async(dispatch_get_main_queue(), ^{
                if (success) {
                    self.showMessage.text = @"指纹登录成功";
                }else {
                    
                    switch (error.code) {
                        // 用户未提供有效证书,(3次机会失败 --身份验证失败)。
                        case kLAErrorAuthenticationFailed:
                        {
                            self.showMessage.text = @"3次机会失败 --身份验证失败";
                            NSLog(@"身份验证失败。");
                        }
                            break;
                        // 认证被取消,(用户点击取消按钮)。
                        case kLAErrorUserCancel:
                        {
                            self.showMessage.text = @"用户点击取消按钮。";
                            NSLog(@"用户点击取消按钮。");
                        }
                            break;
                         // 认证被取消,用户点击回退按钮(输入密码)。
                        case kLAErrorUserFallback:
                        {
                            self.showMessage.text = @"认证被取消,用户点击回退按钮(输入密码)";
                            NSLog(@"用户点击输入密码。");
                        }
                            break;
                         // 身份验证被系统取消,(比如另一个应用程序去前台,切换到其他 APP)。
                        case kLAErrorSystemCancel:
                        {
                            self.showMessage.text = @"另一个应用程序去前台,切换到其他 APP";
                            NSLog(@"另一个应用程序去前台,切换到其他 APP");
                        }
                            break;
                        // 身份验证无法启动,因为密码在设备上没有设置。
                        case kLAErrorPasscodeNotSet:
                        {
                            self.showMessage.text = @"密码在设备上没有设置(锁屏密码)";
                            NSLog(@"密码在设备上没有设置（锁屏密码）");
                        }
                            break;
                        // 身份验证无法启动,因为触摸ID在设备上不可用
                        case kLAErrorTouchIDNotAvailable:
                        {
                            self.showMessage.text = @"触摸ID在设备上不可用";
                            NSLog(@"触摸ID在设备上不可用");
                        }
                            break;
                        // 身份验证无法启动,因为没有登记的手指触摸ID。 没有设置指纹密码时
                        case kLAErrorTouchIDNotEnrolled:
                        {
                            self.showMessage.text = @"没有登记的手指触摸ID。（没有设置指纹密码）";
                            NSLog(@"没有登记的手指触摸ID。");
                        }
                            break;
                        //多次连续使用Touch ID失败，Touch ID被锁，需要用户输入密码解锁
                        case kLAErrorTouchIDLockout:
                        {
                            self.showMessage.text = @"多次连续使用Touch ID失败，Touch ID被锁，需要用户输入密码解锁";
                            NSLog(@"多次连续使用Touch ID失败，Touch ID被锁，需要用户输入密码解锁");
                        }
                            break;
                        //当前软件被挂起取消了授权(如突然来了电话,应用进入前台)
                        case kLAErrorAppCancel:
                        {
                            self.showMessage.text = @"当前软件被挂起取消了授权";
                            NSLog(@"当前软件被挂起取消了授权");
                        }
                            break;
                        //当前软件被挂起取消了授权 (授权过程中,LAContext对象被释)
                        case kLAErrorInvalidContext:
                        {
                            self.showMessage.text = @"LAContext对象被释";
                            NSLog(@"LAContext对象被释");
                        }
                            break;
                            
                        default:
                            break;
                    }
                    
                }
            });

        }];
        
    }else {
        self.showMessage.text = @"设备不支持指纹";
    }
}

#pragma mark - 设备是否支持指纹
-(BOOL)hasDeviceSupportTouchID  {

    self.context = [[LAContext alloc] init];
    //当指纹验证失败后,弹出的对话框  一个是取消，一个根据localizedFallbackTitle属性定义的（默认为输入密码，当填写为空时不出现（即只出现取消按钮））
    self.context.localizedFallbackTitle = @"其他验证方式";
    NSError *error;
    return [self.context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
}


@end
